package com.sinosoft.sm.user.service.api;


import com.sinosoft.sm.system.common.entity.PaginationEntity;
import com.sinosoft.sm.system.common.exception.ObjectIsExistedException;
import com.sinosoft.sm.system.common.exception.ObjectIsNotExistedException;
import com.sinosoft.sm.user.entity.UserEntity;

/**
 * 用户服务层接口定义
 * @author leichao
 */
public interface UserService {

	/**
	 * 根据用户名获取用户信息
	 * @param username 用户名
	 * @return 用户信息
	 * @throws ObjectIsNotExistedException 
	 */
	public UserEntity getUserByUsername(String username) throws ObjectIsNotExistedException;

	/**
	 * 校验用户密码
	 * 传入的密码为原文
	 * 若username或password为空，抛出异常消息“UserServiceImpl:checkUserPassword调用失败，username或password为空”
	 * @param username
	 * @param password
	 * @return
	 * @throws ObjectIsNotExistedException
	 */
	public boolean checkUserPassword(String username, String password)
			throws ObjectIsNotExistedException;
	
	/**
	 *  更新用户密码
	 * 新密码需要加密后存储
	 * 若参数为空，则抛出异常消息“UserServiceImpl:updateUserPassword调用失败，参数为空”
	 * 若用户信息不存在，则抛出异常消息“UserServiceImpl:updateUserPassword调用失败，用户信息不存在”
	 * @param username
	 * @param password
	 * @return
	 * @throws ObjectIsNotExistedException
	 */
	public boolean updateUserPassword(String username, String password)
			throws ObjectIsNotExistedException;

	/**
	 * 获取用户信息
	 * 若userEntity为空则返回所有
	 * @param userEntity	用户信息查询条件
	 * @param page	当前页
	 * @param size	数据大小
	 * @return	用户信息
	 */
	public PaginationEntity getUsers(UserEntity entity, int page, int rows);

	/**
	 * 添加用户，默认绑定普通用户角色
	 * @param userEntity 用户信息
	 * @return true/false
	 * @throws ObjectIsExistedException  若用户名存在则抛出异常
	 */
	public boolean addUser(UserEntity userEntity) throws ObjectIsExistedException;

	/**
	 * 更新用户状态
	 * @param username 用户名
	 * @param state 用户状态  1启用  0禁用
	 * @return
	 * @throws ObjectIsNotExistedException 
	 */
	public boolean updateUserState(String username, String state) throws ObjectIsNotExistedException;
}
